package NO1_Array;

import java.util.Arrays;

/**
 * 2025-6-23
 * 力扣 - 88.合并两个有序数组
 * <p>
 * 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2，另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目。
 * 请你 合并 nums2 到 nums1 中，使合并后的数组同样按 非递减顺序 排列。
 */
public class MergeMain {

    public static void main(String[] args) {
        int[] nums1 = {1, 2, 3, 0, 0, 0};
        int m = 3;
        int[] nums2 = {2, 5, 6};
        int n = 3;
        merge(nums1, m, nums2, n);
    }

    // 先复制，后排序
    public static void merge(int[] nums1, int m, int[] nums2, int n) {
        // 使用System.arraycopy将nums2数组中的元素复制到nums1数组中
        // 参数说明：
        // nums2: 源数组
        // 0: 源数组的起始位置
        // nums1: 目标数组
        // m: 目标数组的起始位置
        // n: 要复制的元素个数
        System.arraycopy(nums2, 0, nums1, m, n);
        
        // 对合并后的数组进行排序
        Arrays.sort(nums1);
        
        // 打印排序后的结果
        System.out.println("nums1 = " + Arrays.toString(nums1));
    }

    // 归并排序，太麻烦了
//    public static void merge(int[] nums1, int m, int[] nums2, int n) {
//        int[] temp = new int[m + n];
//        int index = 0;
//        int i = 0;
//        int j = 0;
//        while (i < m && j < n) {
//            if (nums1[i] <= nums2[j])
//                temp[index++] = nums1[i++];
//            else
//                temp[index++] = nums2[j++];
//        }
//        while (i < m) {
//            temp[index++] = nums1[i++];
//        }
//        while (j < n) {
//            temp[index++] = nums2[j++];
//        }
//        // 再把数组temp中的值赋给nums1
//        for (int k = 0; k < m + n; k++) {
//            nums1[k] = temp[k];
//        }
//    }

    // 从大往小归并
//    public static void merge(int[] nums1, int m, int[] nums2, int n) {
//        int i = m - 1;
//        int j = n - 1;
//        int end = m + n - 1;
//        while (j >= 0) {
//            nums1[end--] = (i >= 0 && nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
//        }
//    }
}
